package com.naiterui.ehp.bs.patient.prodocl;

import java.io.Serializable;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**
 * 药方消息实体对应一JSON结构
 * 用于抽象医生向患者的推荐用药
 * <P>File name : Prescription.java </P>
 * <P>Author : zhouyanxin </P>
 * <P>Date : 2015年6月18日 </P>
 */
public class RecommandDrugItem implements IChecker, Serializable {

    /**
     * 字段或域定义：<code>serialVersionUID</code>
     */
    private static final long serialVersionUID = -7248904807441924378L;

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(RecommandDrugItem.class);

    /**
     * 规格
     */
    private String spec;

    /**
     * 组合套餐
     */
    private String combin;

    /**
     * 商编 药品编号
     */
    private Long productId;

    /**
     * SKU ID
     */
    private Long skuId;

    /**
     * 商品名称
     */
    private String productName;

    /**
     * 购买数量
     */
    private Integer quantity;

    /**
     * 用法用量
     */
    private String usage;

    /**
     * 备注
     */
    private String bakup;

    /**
     * 检测消息属性的完整性和正确性
     * RecommandDrugItem.selfValidate()<BR>
     * <P>Author : zhouyanxin </P>
     * <P>Date : 2015年6月22日 </P>
     * @return
     */
    @Override
    public boolean selfValidate() {
        if (this.productId == null || this.productId <= 0) {
            LOGGER.error("recommandDrug message item attribute [productId] is invalid, [productId] is {}!", this.productId);
            return false;
        }
        if (this.skuId == null || this.skuId <= 0) {
            LOGGER.error("recommandDrug message item attribute [skuId] is invalid, [skuId] is {}!", this.skuId);
            return false;
        }
        if (StringUtils.isEmpty(this.productName)) {
            LOGGER.error("recommandDrug message item attribute [productName] is invalid, [productName] is {}!", this.productName);
            return false;
        }
        if (this.quantity == null || this.quantity <= 0) {
            LOGGER.error("recommandDrug message item attribute [quantiry] is invalid, [quantity] is {}!", this.quantity);
            return false;
        }
        if (StringUtils.isEmpty(this.spec)) {
            LOGGER.error("recommandDrug message item attribute [spec] is invalid, [spec] is {}!", this.spec);
            return false;
        }
        if (StringUtils.isEmpty(this.combin)) {
            LOGGER.error("recommandDrug message item attribute [combian] is invalid, [combian] is {}!", this.combin);
            return false;
        }

        return true;
    }

    /**
     * @return Long 取得域 productId 的方法。
     */
    public Long getProductId() {
        return this.productId;
    }

    /**
     * @param productId 对域 productId 的设置方法.
     */
    public void setProductId(Long productId) {
        this.productId = productId;
    }

    /**
     * @return String 取得域 productName 的方法。
     */
    public String getProductName() {
        return this.productName;
    }

    /**
     * @param productName 对域 productName 的设置方法.
     */
    public void setProductName(String productName) {
        this.productName = productName;
    }

    /**
     * @return Integer 取得域 quantity 的方法。
     */
    public Integer getQuantity() {
        return this.quantity;
    }

    /**
     * @param quantity 对域 quantity 的设置方法.
     */
    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }

    /**
     * @return String 取得域 bakup 的方法。
     */
    public String getBakup() {
        return this.bakup;
    }

    /**
     * @param bakup 对域 bakup 的设置方法.
     */
    public void setBakup(String bakup) {
        this.bakup = bakup;
    }

    /**
     * @return Long 取得域 skuId 的方法。
     */
    public Long getSkuId() {
        return this.skuId;
    }

    /**
     * @param skuId 对域 skuId 的设置方法.
     */
    public void setSkuId(Long skuId) {
        this.skuId = skuId;
    }

    /**
     * @return String 取得域 spec 的方法。
     */
    public String getSpec() {
        return this.spec;
    }

    /**
     * @param spec 对域 spec 的设置方法.
     */
    public void setSpec(String spec) {
        this.spec = spec;
    }

    /**
     * @return String 取得域 combin 的方法。
     */
    public String getCombin() {
        return this.combin;
    }

    /**
     * @param combin 对域 combin 的设置方法.
     */
    public void setCombin(String combin) {
        this.combin = combin;
    }

    /**
     * @return String 取得域 usage 的方法。
     */
    public String getUsage() {
        return this.usage;
    }

    /**
     * @param usage 对域 usage 的设置方法.
     */
    public void setUsage(String usage) {
        this.usage = usage;
    }

}
